5 IFPEEK(51201)<>12ORPEEK(51202)<>200ORPEEK(52222)<>5THEN7 6 GOTO8 7 LOAD"ROUTINES V4",8,1 8 Q$=CHR$(34):R=53265:C=128:V=53248:S=V+1024:LI=52016:WI=51200:CL=51203:SU=51206:SD=51209:POKES+23,.:POKES+4,128:POKEV+32,14:GOSUB1000:PRINT" [215]ELCOME TO THE FOURTH CHAPTER OF":PRINT"[204]OADSTAR'S [195][207][205][193][204][160]0.14 [212]UTORIAL. [201]N":PRINT"[195]HAPTER 1, WE KEYED IN A SHORT, THREE- 18 [153]"LINE LEN(null)(null)ATN(null) PROGRAM IN ORDER TO GET":[153]"USED TO THE LEN(null)(null)ATN(null)CLOSEENVIRONMENT. RIGHT$N":[153]"LENHAPTER 2, WE EXAMINED HOW THAT SHORT":[153]"PROGRAM, WHICH CONVERTED TEMPERATURES":[153]"FROM DEGREES ASCARENHEIT TO DEGREES LENEL-":[153]"SIUS, WORKED. RIGHT$N LENHAPTER 3, WE SAVED 24 PRINT"OUR PROGRAM ONTO A DISKETTE.":GOSUB1200:PRINT" [201]N THIS CHAPTER, WE WILL BEGIN TO":PRINT"LEARN THE MOST POWERFUL AND IMPORTANT":PRINT"FEATURE OF [195][207][205][193][204]: [211][212][210][213][195][212][213][210][197][196][160][211][213][194][208][210][207]-":PRINT"[199][210][193][205][211]. [198]IRST, LET'S PERFORM A LITTLE":PRINT"EXPERIMENT: 30 [153]" (null)IGHT NOW, WE WILL ASSUME YOU HAVE":[153]"JUST (null)(null)ATNSTR$ED THE LEN(null)(null)ATN(null)CLOSESYSTEM INTO THE":[153]"LEN64. (null)HAT MEANS THERE SHOULD BE NO":[153]"LEN(null)(null)ATN(null)CLOSEPROGRAM IN MEMORY.":X%[178].:Y%[178]14:[141]1110:[153]"9902 PEEK(null)(null)VAL(null)CLOSEASC(null)VALVAL.":[141]1200:[153]" (null)OU KNOW (FROM LENHAPTER 1) THAT WE 36 PRINT"ARE IN [195]OMMAND MODE. [198]ROM HERE, COM-":PRINT"MANDS SUCH AS [204][201][211][212], [211][193][214][197], [193][213][212][207], ETC.":PRINT"CAN BE USED. [211]OME PEOPLE CALL THIS":PRINT"'[201]MMEDIATE'[160]MODE, BECAUSE [195][207][205][193][204][160]STATE-":PRINT"MENTS CAN BE ENTERED HERE AND EXECUTED 41 [153]"IMMEDIATELY, WITHOUT WAITING FOR A (null)(null)(null)":[153]"COMMAND. (null)OU HAVE ALREADY SEEN THIS":[153]"IN ACTION: (null)ATN(null)(null)CLOSE(USED LAST CHAPTER TO":[153]"FORMAT A NEW DISK)CLOSEIS A STATEMENT!":[141]1200:[153]" ATNCTUALLY, ATN(null)(null)CLOSESIMPLE STATEMENT EX- 46 PRINT"CEPT FOR THE [201][206][208][213][212][160]STATEMENT MAY BE":PRINT"ENTERED IN [201]MMEDIATE MODE. [198]OR EXAM-":PRINT"PLE, TYPE THIS:":PRINT" [208][210][201][206][212][160]"Q$"[195][207][205][193][204][160][201][211][160][197][193][211][217]!"Q$"":GOSUB1160:GOSUB1300:X%=.:Y%=16:A$="[208][210][201][206][212] "+Q$+"[195][207][205][193][204] [201][211] [197][193][211][217]!"+Q$:GOSUB1600 51 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO51 52 GOSUB1500:IFK$<>CHR$(13)THEN52 53 PRINT:PRINT"[195][207][205][193][204][160][201][211][160][197][193][211][217]!":GOSUB1035:GOSUB1150:PRINT"[144][217]OU JUST EXECUTED A [208][210][201][206][212][160]STATEMENT IN":PRINT"[201]MMEDIATE MODE. [201]T HAD NO LINE NUM-":PRINT"BER, SO IT WASN'T 'STORED'.":GOSUB1205:PRINT" [212]O PROVE IT, TRY TO [204][201][211][212] THE CUR-":PRINT"RENT PROGRAM: 65 [141]1160:[141]1300:X%[178].:Y%[178]19:A$[178]"(null)RIGHT$(null)(null)":[141]1600 66 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]66 67 [141]1500:[139]K$[179][177][199](13)[167]67 68 [153]:[141]1035:[141]1150:[153]"STOP ATNS YOU CAN SEE, THERE IS NO PRO-":[153]"GRAM IN MEMORY, THOUGH YOU JUST TYPED":[153]"IN A (null)(null)RIGHT$(null)(null)CLOSESTATEMENT. PEEKECAUSE IT HAD":[153]"NO LINE NUMBER, IT WAS EXECUTED IMME-":[153]"DIATELY INSTEAD OF BEING STORED AS A 73 PRINT"LINE IN A PROGRAM, WAITING FOR A [210][213][206]":PRINT"COMMAND.":GOSUB1205:PRINT" [204]ET'S EXPERIMENT A LITTLE WITH THE":PRINT"[201]MMEDIATE MODE [208][210][201][206][212]. [212]RY THIS:":PRINT" [208][210][201][206][212][160]"Q$"2"Q$"":GOSUB1160:GOSUB1300:X%=.:Y%=21:A$="[208][210][201][206][212] "+Q$+"2"+Q$:GOSUB1600 81 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO81 82 GOSUB1500:IFK$<>CHR$(13)THEN82 83 PRINT:PRINT"2":GOSUB1035:GOSUB1150:PRINT"[144][200]MMM. . .NOT EXACTLY UNEXPECTED! [206]OW":PRINT"TRY THIS:":PRINT" [208][210][201][206][212][160]2":GOSUB1160:X%=.:Y%=24:A$="[208][210][201][206][212] 2":GOSUB1600 91 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO91 92 GOSUB1500:IFK$<>CHR$(13)THEN92 93 GOSUB1700:PRINT"[145]":GOSUB1700:PRINT"[145]2":GOSUB1700:GOSUB1035:GOSUB1150:GOSUB1205:PRINT" [201]T SEEMS AS IF THE DOUBLE-QUOTES":PRINT"AREN'T REALLY NECESSARY. [193]FTER ALL,":PRINT"BOTH STATEMENTS [208][210][201][206][212]ED A 2! [194]UT BE-":PRINT"FORE WE JUMP TO ANY CONFUSIONS, LET'S":PRINT"TRY ANOTHER EXPERIMENT: 100 [153]" (null)(null)RIGHT$(null)(null)CLOSE"Q$"2+2"Q$"":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) "[170]Q$[170]"2+2"[170]Q$:[141]1600 102 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]102 103 [141]1500:[139]K$[179][177][199](13)[167]103 104 [141]1700:[153]"ON":[141]1700:[153]"ON2+2":[141]1700:[141]1035:[141]1150:[153]"STOPLEFT$MMM . . . RIGHT$ AM NOT SURE IF THAT IS":[153]"QUITE WHAT YOU EXPECTED!":[141]1205:[153]" (null)ET'S TRY IT THE OTHER WAY:":[153]" (null)(null)RIGHT$(null)(null)CLOSE2+2":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) 2+2":[141]1600 116 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]116 117 [141]1500:[139]K$[179][177][199](13)[167]117 118 [141]1700:[153]"ON":[141]1700:[153]"ON4":[141]1700:[141]1035:[141]1150:[153]"STOP (null)ELL! RIGHT$T SEEMS THAT LEN(null)(null)ATN(null)'S (null)(null)RIGHT$(null)(null)":[153]"STATEMENT TREATS QUOTES MUCH AS AN UP-":[153]"STANDING JOURNALIST WOULD. RIGHT$F IT'S IN":[153]"QUOTES, (null)(null)RIGHT$(null)(null) IT EXACTLY! RIGHT$F IT IS 124 PRINT"NOT, PARAPHRASE (I.E. [208][210][201][206][212][160]THE [214][193][204][213][197]":PRINT"OF THE [197][216][208][210][197][211][211][201][207][206])!":GOSUB1205:PRINT" [206]OW THAT WE KNOW THAT WE CAN USE":PRINT"[195][207][205][193][204]'S [208][210][201][206][212][160]STATEMENT IN [201]MMEDIATE":PRINT"[205]ODE AS A KIND OF CALCULATOR, LET'S":PRINT"TRY SOMETHING INTERESTING:":PRINT" [208][210][201][206][212][160]5/2 135 [153]" ^":[153]" /(null)HAT MEANS DIVIDE 5 BY 2":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) 5/2":[141]1600 141 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]141 142 [141]1500:[139]K$[179][177][199](13)[167]142 143 [141]1700:[153]"ON":[141]1700:[153]"ON2.5":[141]1700:[141]1035:[141]1150:[153]"STOPRIGHT$T SEEMS LEN(null)(null)ATN(null)CLOSECAN DO STR$ECIMAL (null)ATH!":[141]1205:[153]" PEEKUT WHAT IF YOU DON'T (null)ATN(null)(null)CLOSEDECI-":[153]"MALS? (null)HAT IF YOU WANTED TO FIND OUT":[153]"HOW MANY TIMES 2 WOULD GO VAL(null)VAL(null)(null)(null) INTO":[153]"5? (null)OU COULD TRY THIS: 149 PRINT" [208][210][201][206][212][160][201][206][212](5/2)":GOSUB1160:GOSUB1300:X%=.:Y%=24:A$="[208][210][201][206][212] [201][206][212](5/2)":GOSUB1600 151 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO151 152 GOSUB1500:IFK$<>CHR$(13)THEN152 153 GOSUB1700:PRINT"[145]":GOSUB1700:PRINT"[145]2":GOSUB1700:GOSUB1035:GOSUB1150:PRINT"[144][214]OILA! [215]E JUST USED OUR FIRST [194]UILT-":PRINT"IN [195][207][205][193][204][160][198]UNCTION, IN THIS CASE [201][206][212](),":PRINT"TO GIVE US THE [201]NTEGER VERSION OF 5/2!":GOSUB1205:PRINT" [212]HERE ARE MANY [195][207][205][193][204][160][194]UILT-IN [198]UNC- 161 [153]"TIONS. (null)OME PERFORM ARITHMETIC/ALGE-":[153]"BRAIC TRANSFORMATIONS SUCH AS RIGHT$(null)(null)(),":[153]"(null)CHR$(null)()CLOSE(RETURNS THE SIGN) AND ATNPEEK(null)()":[153]"(RETURNS THE ATNPEEK(null)OLUTE VALUE). (null)THERS":[153]"PERFORM HIGHER MATH FUNCTIONS, SUCH AS":[153]"(null)RIGHT$(null)(), (null)ATN(null)(), (null)(null)CHR$(), ATN(null)(null)(), &C. (null)TILL 167 PRINT"OTHERS RETURN SYSTEM VALUES, SUCH AS":PRINT"[218][207][206][197]. [212]HERE ARE EVEN FUNCTIONS FOR":PRINT"CHARACTER STRINGS AS WELL AS NUMBERS!":GOSUB1200:PRINT" [210]EMEMBER THE PROGRAM WE WROTE THAT":PRINT"CONVERTS DEGREES [198]ARENHEIT TO DEGREES 172 [153]"LENELSIUS? (null)OULDN'T IT BE NICE IF THERE":[153]"WERE A FUNCTION CALLED LENVAL(null)(null)RIGHT$(null)(null)() THAT":[153]"WOULD DO THAT?CLOSE (null)ET'S TRY IT:":[153]" (null)(null)RIGHT$(null)(null)CLOSELENVAL(null)(null)RIGHT$(null)(null)(212)":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) LENVAL(null)(null)RIGHT$(null)(null)(212)":[141]1600 181 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]181 182 [141]1500:[139]K$[179][177][199](13)[167]182 183 [141]1700:S[178]3:[141]2000:[153]"LEN(null)(null)(null)ATN(null)STR$, ATN(null)(null)ATN(null), (null)(null)PEEK(null)(null)(null)RIGHT$(null)CHR$, (null)(null) (null)(null)(null)LENVALSTR$(null)(null)VAL";:[141]1700:[153]"ON":[153]"VAL(null)(null)(null)(null)";:[141]1700:[141]1035:[141]1150:[153]"WAITSTOPSTR$IDN'T WORK, DID IT? (null)HAT MESSAGE":[153]"THAT APPEARED IS AN 'VALRROR (null)ESSAGE'.":[141]1205:[153]" PEEKECAUSE ONLY 9902 BYTES ARE FREE 191 PRINT"FOR YOUR PROGRAMS AFTER LOADING [195][207][205][193][204],":PRINT"IT DOESN'T MAKE SENSE TO HAVE ALL OF":PRINT"THOSE ERROR MESSAGES IN MEMORY, SO THE":PRINT"STANDARD VERSION OF [195][207][205][193][204][160]READS ITS":PRINT"ERROR MESSAGES FROM A DISK FILE CALLED":PRINT"'[195][207][205][193][204][197][210][210][207][210][211]', INSTEAD. 197 [153]" STR$ON'T WORRY ABOUT WHAT THIS PARTIC-":[153]"ULAR ERROR MESSAGE MEANS.":[141]1200:[153]" (null)HE IMPORTANT POINT IS THAT LEN(null)(null)ATN(null)":[153]"OBVIOUSLY HASN'T ANY BUILT-IN FUNCTION":[153]"LENVAL(null)(null)RIGHT$(null)(null)(). (null)F COURSE, SUCH A FUNCTION 203 PRINT"WOULD BE PRETTY SPECIAL-INTEREST, AND":PRINT"[195][207][205][193][204][160]IS A GENERAL-PURPOSE LANGUAGE!":PRINT" [194]UT WHAT IF YOU NEED A [195][197][204][211][201][213][211]()":PRINT"FUNCTION? [215]ELL, BELIEVE IT OR NOT,":PRINT"[195][207][205][193][204][160]LETS YOU 'ROLL YOUR OWN' FUNC-":PRINT"TIONS!":GOSUB1200 210 PRINT" [212]O DO THIS, LET'S [204][207][193][196] THE PROGRAM":PRINT"THAT WE WROTE EARLIER THAT DOES [198]AREN-":PRINT"HEIT-[195]ELSIUS CONVERSIONS. [215]E CALLED":PRINT"IT '[195].[195][197][204][211][201][213][211]'. [204]ET'S ASSUME THAT THE":PRINT"DISK IT IS ON IS IN THE DRIVE. [206]OW":PRINT"TYPE: [204][207][193][196] "Q$"[195].[195][197][204][211][201][213][211]"Q$" 220 [141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)ATNSTR$ "[170]Q$[170]"LEN.LENVAL(null)(null)RIGHT$(null)(null)"[170]Q$:[141]1600 221 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]221 222 [141]1500:[139]K$[179][177][199](13)[167]222 223 [141]1700:S[178]4:[141]2000:[153]"ON":[141]1700:[141]1035:[141]1150:[153]"STOPRIGHT$T'S (null)(null)ATNSTR$ED! (null)OW (null)RIGHT$(null)(null)CLOSEIT:":[141]1160:X%[178].:Y%[178]24:A$[178]"(null)RIGHT$(null)(null)":[141]1600 226 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]226 227 [141]1500:[139]K$[179][177][199](13)[167]227 228 [141]1700:[153]"ON":[153]"0010 RIGHT$(null)(null)(null)(null)"Q$"STR$VALCHR$(null)VALVAL(null)CLOSEASC?CLOSE"Q$": ASCATN(null)VAL(null)LEFT$VALRIGHT$(null)";:[141]1700:[153]"ON":[153]"0020 LENVAL(null)(null)RIGHT$(null)(null):=(ASCATN(null)VAL(null)LEFT$VALRIGHT$(null)-32)*(5/9)";:[141]1700:[153]"ON":[153]"0030 (null)(null)RIGHT$(null)(null)CLOSEASCATN(null)VAL(null)LEFT$VALRIGHT$(null);"Q$"ASC ="Q$";LENVAL(null)(null)RIGHT$(null)(null);"Q$"LEN"Q$;:[141]1700:[141]1700:[141]1035:[141]1150:[141]1205:[153]" (null)OOKS KINDA FAMILIAR, DOESN'T IT? 236 PRINT"[215]ELL, NOTICE THE FORMULA IN LINE 20.":PRINT"[204]ET'S MAKE A FUNCTION THAT WILL, GIVEN":PRINT"A VALUE, RETURN THE RESULT OF THE":PRINT"FORMULA BY SUBSTITUTING THE GIVEN ":PRINT"VALUE FOR THE VARIABLE [198][193][210][197][206][200][197][201][212]. ":PRINT"[198]IRST, WE NEED TO START WITH A CLEAN 242 [153]"SLATE. (null)SE THE (null)VAL(null) COMMAND TO ERASE":[153]"THE PROGRAM IN MEMORY:":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)VAL(null)":[141]1600 246 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]246 247 [141]1500:[139]K$[179][177][199](13)[167]247 248 [141]1700:[141]1700:[141]1035:[141]1150:[141]1205:[153]"(null)K! (null)OW, TYPE THE ATN(null)(null)(null)CLOSECOMMAND:":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"ATN(null)(null)(null)":[141]1600 256 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]256 257 [141]1500:[139]K$[179][177][199](13)[167]257 258 [141]1700:[141]1700:[153]"0010";:[141]1035:[141]1150:[153]"WAITSTOPCHR$OOD! (null)OW TYPE THE FOLLOWING:":[153]" ASC(null)(null)LENCLOSELENVAL(null)(null)RIGHT$(null)(null)(ASCATN(null)VAL(null)LEFT$VALRIGHT$(null))":[141]1160:X%[178]5:Y%[178]24:A$[178]"ASC(null)(null)LEN LENVAL(null)(null)RIGHT$(null)(null)(ASCATN(null)VAL(null)LEFT$VALRIGHT$(null))":[141]1600 266 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]266 267 [141]1500:[139]K$[179][177][199](13)[167]267 268 [141]1700:[153]"0020";:[141]1035:[141]1150:[153]"WAITSTOP(null)OW, THIS LINE:":[153]" (null)VAL(null)(null)(null)(null)CLOSE(ASCATN(null)VAL(null)LEFT$VALRIGHT$(null)-32)*(5/9)":[141]1160:X%[178]5:Y%[178]24:A$[178]"(null)VAL(null)(null)(null)(null) (ASCATN(null)VAL(null)LEFT$VALRIGHT$(null)-32)*(5/9)":[141]1600 276 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]276 277 [141]1500:[139]K$[179][177][199](13)[167]277 278 [141]1700:[153]"0030";:[141]1035:[141]1150:[141]1205:[153]"ASCINALLY, TYPE THIS LINE:":[153]" VAL(null)STR$ASC(null)(null)LENCLOSELENVAL(null)(null)RIGHT$(null)(null)":[141]1160:[141]1300:X%[178]5:Y%[178]24:A$[178]"VAL(null)STR$ASC(null)(null)LEN LENVAL(null)(null)RIGHT$(null)(null)":[141]1600 286 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]286 287 [141]1500:[139]K$[179][177][199](13)[167]287 288 [141]1700:[153]"0040";:[141]1035:[141]1150:[153]"WAITSTOP(null)E'RE FINISHED, BUT THE ATN(null)(null)(null)CLOSECOMMAND":[153]"DOESN'T KNOW IT. (null)RESS THE [(null)VAL(null)(null)(null)(null)]":[153]"KEY TO LEAVE ATN(null)(null)(null)CLOSEMODE:":[141]1160:X%[178]5:Y%[178]24 293 [141]1500:[139]K$[179][177][199](13)[167]293 294 [141]1700:[141]1035:[141]1150:[153]"WAITSTOP (null)HERE'S OUR NEW FUNCTION! PEEKUT DOES":[153]"IT WORK? (null)ET'S FIND OUT!":[141]1205:[153]" (null)ET'S TRY THAT EXPERIMENT WE DID A":[153]"FEW 'PAGES' BACK:":[153]" (null)(null)RIGHT$(null)(null)CLOSELENVAL(null)(null)RIGHT$(null)(null)(212)":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) LENVAL(null)(null)RIGHT$(null)(null)(212)":[141]1600 306 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]306 307 [141]1500:[139]K$[179][177][199](13)[167]307 308 [141]1700:S[178]3:[141]2000:[153]"LEN(null)(null)(null)ATN(null)STR$, ATN(null)(null)ATN(null), (null)(null)PEEK(null)(null)(null)RIGHT$(null)CHR$, (null)(null) (null)(null)(null)LENVALSTR$(null)(null)VAL";:[141]1700:[153]"ON":[153]"VAL(null)(null)(null)(null)";:[141]1700:[141]1035:[141]1150:[153]"WAITSTOP(null)AY (null)LEFT$ATN(null)?!? (null)H! (null)AYBE WE NEED TO (null)(null)(null)":[153]"OUR PROGRAM FIRST:":[141]1160:X%[178].:Y%[178]24:A$[178]"(null)(null)(null)":[141]1600 316 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]316 317 [141]1500:[139]K$[179][177][199](13)[167]317 318 [141]1700:[141]1700:[153]"ON":[153]"VAL(null)STR$CLOSEATN(null)CLOSE0030";:[141]1700:[141]1700:[141]1035:[141]1150:[153]"STOP(null)ELL, (null)LEFT$ATN(null) SURE DIDN'T LOOK LIKE IT":[153]"DID VERY MUCH, DID IT?":[141]1205:[153]" (null)ELL, JUST FOR LAUGHS, LET'S TRY":[153]"OUR EXPERIMENT AGAIN:":[153]" (null)(null)RIGHT$(null)(null)CLOSELENVAL(null)(null)RIGHT$(null)(null)(212) 330 GOSUB1160:GOSUB1300:X%=.:Y%=24:A$="[208][210][201][206][212] [195][197][204][211][201][213][211](212)":GOSUB1600 331 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO331 332 GOSUB1500:IFK$<>CHR$(13)THEN332 333 GOSUB1700:PRINT"100";:GOSUB1700:GOSUB1700:GOSUB1035:GOSUB1150:PRINT"[144] [207]H, [215][207][215]! [201]T [215][207][210][203][197][196]! [201]T SEEMS THAT":PRINT"USER-DEFINED [198][213][206][195]TIONS REMAIN UNKNOWN":PRINT"TO THE SYSTEM UNTIL YOU [210][213][206] THE PRO-":PRINT"GRAM!":GOSUB1205:PRINT" [200]EY, [201] GOTTA TRY THIS SOME MORE!":PRINT"[212]RY THIS ONE: 342 [153]" (null)(null)RIGHT$(null)(null)CLOSELENVAL(null)(null)RIGHT$(null)(null)(112+100)":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)(null)RIGHT$(null)(null) LENVAL(null)(null)RIGHT$(null)(null)(112+100)":[141]1600 346 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]346 347 [141]1500:[139]K$[179][177][199](13)[167]347 348 [141]1700:[153]"100";:[141]1700:[141]1700:[141]1035:[141]1150:[153]"STOP (null)OW! (null)UR ASC(null)(null)LENTION CAN EVEN TAKE AN":[153]"EXPRESSION AS ITS ATN(null)CHR$(null)(null)VAL(null)(null)CLOSEVALUE! LENAN":[153]"THE NUMBER IT (null)VAL(null)(null)(null)(null)S BE USED IN AN":[153]"EXPRESSION AS WELL? (null)ET'S FIND OUT!":[141]1205:[153]"(null)RY THIS: 356 PRINT" [208][210][201][206][212][160]50+[195][197][204][211][201][213][211](212)":GOSUB1160:GOSUB1300:X%=.:Y%=24:A$="[208][210][201][206][212] 50+[195][197][204][211][201][213][211](212)":GOSUB1600 361 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO361 362 GOSUB1500:IFK$<>CHR$(13)THEN362 363 GOSUB1700:PRINT"150";:GOSUB1700:GOSUB1700:GOSUB1035:GOSUB1150:PRINT"[144][201]T SURE CAN! [207]UR FUNCTION ACTS JUST":PRINT"LIKE A BUILT-IN FUNCTION! [201]T CAN EVEN":PRINT"TAKE A VARIABLE AS ITS ARGUMENT, AND":PRINT"THE RESULT CAN BE ASSIGNED TO A VARIA-":PRINT"BLE!":GOSUB1205 370 PRINT" [193] [198][213][206][195]TION IS ONE OF [195][207][205][193][204]'S PRO-":PRINT"GRAMMING STRUCTURES. [201]T IS ONE OF THE":PRINT"TWO TYPES OF [195][207][205][193][204][160]SUBPROGRAMS. [201]N":PRINT"FACT, IT IS A SMALL PROGRAM THAT PER-":PRINT"FORMS ONE PARTICULAR TASK USING ZERO 375 [153]"OR MORE 'ARGUMENT' VALUES, AND (null)VAL(null)(null)(null)(null)S":[153]"A SINGLE RESULT. (null)HERE ARE MANY AD-":[153]"VANTAGES TO USING ASC(null)(null)LENTIONS AS OPPOSED":[153]"TO HAND-CODING THE EQUIVALENT EXPRES-":[153]"SIONS.":[141]1200:[153]" (null)NE ADVANTAGE IS THAT A ASC(null)(null)LENTION 381 PRINT"CAN BE GIVEN A NAME THAT MAKES SENSE":PRINT"TO US HUMANS. [215]HICH OF THE FOLLOWING":PRINT"TWO LINES OF [195][207][205][193][204][160]CODE:":PRINT" [195]:=([198]-32)*(5/9) //OR":PRINT" [195]:=[195][197][204][211][201][213][211]([198])":PRINT"HAS A MORE OBVIOUS MEANING?":GOSUB1200:PRINT" [193]NOTHER ADVANTAGE IS THAT A [198][213][206][195]- 391 [153]"TION ONLY NEEDS TO BE DEFINED ONCE IN":[153]"A PROGRAM. RIGHT$T CAN THEN BE USED MANY":[153]"TIMES, AS IF IT WERE A LEN(null)(null)ATN(null)CLOSEBUILT-IN":[153]"FUNCTION.":[153]" (null)ET'S LOOK AT OUR ASC(null)(null)LENTION A LITTLE":[153]"MORE CLOSELY. (null)RIGHT$(null)(null) IT FOR ME, WILL":[153]"YA? 400 GOSUB1160:GOSUB1300:X%=.:Y%=24:A$="[204][201][211][212]":GOSUB1600 401 IFETHENA$=MID$(A$,E):E=.:GOSUB1605:GOTO401 402 GOSUB1500:IFK$<>CHR$(13)THEN402 403 GOSUB1700:PRINT"0010 [198][213][206][195][160][195][197][204][211][201][213][211]([198][193][210][197][206][200][197][201][212])";:GOSUB1700:PRINT"[145]":PRINT"0020 [210][197][212][213][210][206][160]([198][193][210][197][206][200][197][201][212]-32)*(5/9)";:GOSUB1700:PRINT"[145]":PRINT"0030 [197][206][196][198][213][206][195][160][195][197][204][211][201][213][211]";:GOSUB1700:GOSUB1700:GOSUB1035:GOSUB1150:GOSUB1205:PRINT" [204]INE 10 IS THE [198][213][206][195]TION [200]EADER":PRINT"STATEMENT. [201]T GIVES THE NAME OF THE 408 [153]"ASC(null)(null)LENTION, AND TELLS HOW MANY 'ARGU-":[153]"MENTS' IT HAS AND WHAT TYPES THEY ARE.":[153]" (null)INE 20 IS A (null)VAL(null)(null)(null)(null) STATEMENT. ATNL-":[153]"THOUGH A ASC(null)(null)LENTION MAY CONTAIN OTHER":[153]"STATEMENTS, IT MUST HAVE AT LEAST ONE":[153]"OF THESE.":[141]1200 415 [153]" (null)HE EXPRESSION IN THE (null)VAL(null)(null)(null)(null) STATE-":[153]"MENT DEFINES THE VALUE TO BE (null)VAL(null)(null)(null)(null)ED":[153]"BY OUR ASC(null)(null)LENTION. RIGHT$N THIS CASE, IT IS":[153]"THE FORMULA FOR CONVERTING A TEMPERA-":[153]"TURE EXPRESSED IN DEGREES ASCARENHEIT TO 420 PRINT"ITS EQUIVALENT EXPRESSED IN DEGREES":PRINT"[195]ELSIUS. [212]HUS, THE VERY NAME OF OUR":PRINT"[198][213][206][195]TION!":GOSUB1200:PRINT" [204]INE 30 IS THE [197][206][196][198][213][206][195] STATEMENT,":PRINT"WHICH DENOTES THE END OF THE [198][213][206][195]TION":PRINT"DEFINITION, AND THUS SEPARATES STATE- 428 [153]"MENTS BELONGING TO THE ASC(null)(null)LENTION FROM":[153]"STATEMENTS BELONGING TO OTHER STRUC-":[153]"TURES OR TO THE MAIN PROGRAM ITSELF.":[153]" (null)OTICE THE EXTRA SPACE BEFORE THE":[153]"WORD '(null)VAL(null)(null)(null)(null)' IN LINE 20. (null)HAT IS FOR":[153]"THE BENEFIT OF US HUMANS.":[141]1200 435 [153]" LEN(null)(null)ATN(null)CLOSEAUTOMATICALLY INDENTS STATE-":[153]"MENTS INSIDE ANY STRUCTURES WHEN THE":[153]"PROGRAM IS (null)RIGHT$(null)(null)ED. RIGHT$F ONE STRUCTURE":[153]"IS 'NESTED' INSIDE ANOTHER, THE STATE-":[153]"MENTS INSIDE THE NESTED STRUCTURE ARE 440 PRINT"INDENTED TWICE, AND SO ON AND SO ON!":PRINT" [194]EFORE WE FORGET, LET'S [211][193][214][197][160]OUR":PRINT"WORK SO IT WILL BE HERE WHEN WE GET":PRINT"BACK!":GOSUB1200:PRINT" [201]'LL PRETEND YOU ARE GOING TO [211][193][214][197]":PRINT"THE PROGRAM ONTO THE DISK ACTUALLY IN":PRINT"YOUR DRIVE. [212]YPE: 448 [153]" (null)ATN(null)VALCLOSE"Q$"LEN.ASC.LENVAL(null)(null)RIGHT$(null)(null)"Q$"":[141]1160:[141]1300:X%[178].:Y%[178]24:A$[178]"(null)ATN(null)VAL "[170]Q$[170]"LEN.ASC.LENVAL(null)(null)RIGHT$(null)(null)"[170]Q$:[141]1600 451 [139]E[167]A$[178][202](A$,E):E[178].:[141]1605:[137]451 452 [141]1500:[139]K$[179][177][199](13)[167]452 453 [141]1700:S[178]5:[141]2000:[141]1700:[141]1035:[141]1150:[153]"WAITSTOPSTR$ONE! (null)EXT ISSUE, WE WILL LEARN SOME":[153]"MORE ABOUT ASC(null)(null)LENTIONS, AND ALSO LEARN":[153]"ABOUT THE OTHER KIND OF SUBPROGRAM.":[141]1205:[153]" (null)ELL, ITS QUIZ TIME AGAIN! RIGHT$ WILL 461 PRINT"ASK YOU 10 QUESTIONS BASED ON MATERIAL":PRINT"COVERED IN THIS LESSON. [212]HE QUESTIONS":PRINT"WILL BE EITHER [212]RUE/[198]ALSE OR [205]ULTIPLE-":PRINT"[195]HOICE. [217]OU MAY PICK YOUR RESPONSE":PRINT"FROM THE  REVERSED [146] LETTERS ON THE 466 [153]"SCREEN. (null)EADY? LEFT$ERE GOES . . .":[141]1200:[153]"1. LENOMMAND (null)ODE IS ALSO CALLED:":[153]"  ATN WAIT RIGHT$NTERMEDIATE (null)ODE":[153]"  PEEKCLOSEWAIT RIGHT$MMEDIATE (null)ODE":[153]"  LEN WAIT RIGHT$NSTANTANEOUS (null)ODE":[153]"  STR$ WAIT RIGHT$MPROBABLE (null)ODE 505 A$="[194]":W1$="[193]":W2$="[195]":W3$="[196]":GOSUB1800:PRINT"[211]TATEMENTS CAN BE ENTERED":PRINT"WITHOUT LINE NUMBERS IN THIS MODE FOR":PRINT"[201]MMEDIATE EXECUTION.":GOSUB1205:PRINT"2. [193][160]STATEMENT ENTERED WITH NO LINE":PRINT"NUMBER IN [201]MMEDIATE [205]ODE BECOMES PART 512 [153]"OF THE PROGRAM IN MEMORY.":[153]"  (null)CLOSEWAITRUE OR  ASCCLOSEWAITALSE?":A$[178]"ASC":W1$[178]"(null)":W2$[178]"(null)":W3$[178]"(null)":[141]1800:[153]"(null)UCH A STATEMENT IS EXECU-":[153]"TED ONCE IMMEDIATELY, THEN DISCARDED!":[141]1205:[153]"3. ATN LEN(null)(null)ATN(null)CLOSEPEEKUILT-RIGHT$N ASCUNCTION IS USED 521 PRINT"IN AN EXPRESSION TO RETURN A VALUE.":PRINT"  [212][160][146]RUE OR  [198][160][146]ALSE?":A$="[212]":W1$="[198]":W2$="[198]":W3$="[198]":GOSUB1800:PRINT"[212]HAT IS THE PURPOSE OF [193][206][217]":PRINT"FUNCTION, EITHER A [194]UILT-[201]N ONE OR A":PRINT"[213]SER-[196]EFINED ONE!":GOSUB1205 530 PRINT"4. [215]HICH OF THE FOLLOWING IS MOST":PRINT"DEFINITELY [206][207][212][160]A [194]UILT-[201]N [198]UNCTION?":PRINT"  [193] [146] [201][206][212]()":PRINT"  [194] [146] [193][212][206]()":PRINT"  [195] [146] [195][197][204][211][201][213][211]()":PRINT"  [196] [146] [211][212][193][212][213][211]$":A$="[195]":W1$="[193]":W2$="[194]":W3$="[196]":GOSUB1800:PRINT"[210]EMEMBER, WHEN WE TRIED TO 538 [153]"USE LENVAL(null)(null)RIGHT$(null)(null)() AS A PEEKUILT-RIGHT$N ASCUNCTION,":[153]"WE GOT AN ERROR MESSAGE!":[141]1205:[153]"5. (null)PEAKING OF ERROR MESSAGES, LEN(null)(null)ATN(null)":[153]"KEEPS ITS ERROR MESSAGES:":[153]"  ATN WAIT RIGHT$N A DISK FILE 'LEN(null)(null)ATN(null)VAL(null)(null)(null)(null)(null)'.":[153]"  PEEK WAIT RIGHT$N A DISK FILE 'VAL(null)(null)(null)(null)(null)VAL(null)(null)'. 544 PRINT"  [195] [146] [201]N MEMORY.":PRINT"  [196] [146] [201]N ITS HEAD.":A$="[193]":W1$="[194]":W2$="[195]":W3$="[196]":GOSUB1800:PRINT"[195][207][205][193][204] 0.14 ACCESSES A DISK":PRINT"FILE CALLED '[195][207][205][193][204][197][210][210][207][210][211]' TO GET THE":PRINT"TEXT OF ITS ERROR MESSAGES.":GOSUB1205:PRINT"6. [194]EFORE YOU CAN USE ANY [198][213][206][195]TIONS 551 [153]"DEFINED IN A PROGRAM, YOU MUST FIRST:":[153]"  ATN WAIT (null)RIGHT$(null)(null)CLOSETHE PROGRAM.":[153]"  PEEK WAIT (null)RIGHT$(null)(null) THE ASC(null)(null)LENTION ONLY.":[153]"  LEN WAIT (null)VAL(null)CLOSETHE PROGRAM.":[153]"  STR$ WAIT (null)(null)(null) THE PROGRAM.":A$[178]"STR$":W1$[178]"ATN":W2$[178]"PEEK":W3$[178]"LEN":[141]1800:[153]"(null)HE LEN(null)(null)ATN(null)CLOSESYSTEM DOESN'T 558 PRINT"KNOW ABOUT ANY [213]SER-[196]EFINED [198][213][206][195]TIONS":PRINT"UNTIL THEY ARE DEFINED (BY [210][213][206]).":GOSUB1205:PRINT"7. [212]HE [198][213][206][195] STATEMENT:":PRINT"  [193][160][146] [206]AMES A [198][213][206][195]TION.":PRINT"  [194][160][146] [211]TARTS A [198][213][206][195] DEFINITION.":PRINT"  [195] [146] [196]ECLARES ANY [193]RGUMENTS. 564 [153]"  STR$ WAIT ATNLL OF THE ABOVE.":[141]1800:[153]"(null)HE ASC(null)(null)LEN STATEMENT DEFINES":[153]"HOW THE ASC(null)(null)LENTION LOOKS TO THE":[153]"REST OF THE PROGRAM!":[141]1205:[153]"8. ATN (null)VAL(null)(null)(null)(null) STATEMENT WITHIN A ASC(null)(null)LEN:":[153]"  ATN WAIT IS SAME AS [(null)VAL(null)(null)(null)(null)]CLOSEKEY. 572 PRINT"  [194] [146] [210][197][212][213][210][206]S THE EXPRESSION.":PRINT"  [195] [146] [210][197][212][213][210][206]S THE ARGUMENT.":PRINT"  [196] [146] [210][197]-[212][213][210][206]S THE DISKETTE.":A$="[194]":W1$="[193]":W2$="[195]":W3$="[196]":GOSUB1800:PRINT"[193] [210][197][212][213][210][206][160]STATEMENT SIMPLY":PRINT"RETURNS THE VALUE OF ITS EXPRESSION AS 578 [153]"THE RESULT OF THE ASC(null)(null)LENTION.":[141]1205:[153]"9. ATNN VAL(null)STR$ASC(null)(null)LEN STATEMENT MARKS:":[153]"  ATN WAIT THE END OF A PEEKUILT-RIGHT$N ASCUNC.":[153]"  PEEK WAIT THE END OF THE PROGRAM.":[153]"  LEN WAIT THE END OF A ASC(null)(null)LENTION.":[153]"  STR$ WAIT THE END OF FUNK MUSIC. 585 A$="[195]":W1$="[193]":W2$="[194]":W3$="[196]":GOSUB1800:PRINT"[197][206][196][198][213][206][195] SEPARATES THOSE":PRINT"STATEMENTS WITHIN A [198][213][206][195]TION FROM THE":PRINT"REST OF THE PROGRAM.":GOSUB1205:PRINT"10. [193][160][198][213][206][195]TION DEFINITION MAY CON-":PRINT"TAIN MORE THAN ONE [210][197][212][213][210][206] STATEMENT: 592 [153]"  (null) WAITRUE OR  ASC WAITALSE?":A$[178]"(null)":W1$[178]"ASC":W2$[178]"ASC":W3$[178]"ASC":[141]1800:[153]"(null)EMEMBER, A ASC(null)(null)LENTION DEFI-":[153]"NITION MUST CONTAIN ATN(null)CLOSE(null)VALATN(null)(null)CLOSE1 (null)VAL(null)(null)(null)(null)":[153]"STATEMENT, OR THERE WON'T BE A VALUE":[153]"FOR THE ASC(null)(null)LENTION TO (null)VAL(null)(null)(null)(null)!":[141]1205 800 [153]" (null)ELL, THAT'S THE END OF OUR LITTLE":[153]"QUIZ. (null)F THE 10 QUESTIONS GIVEN, YOU":[153]"ANSWERED"SC%"CORRECTLY!":[139]SC%[178]10[167][153]" ATN (null)VAL(null)ASCVALLEN(null)CLOSE(null)LEN(null)(null)VAL! (null)OU'RE DEFINITELY":[137]810 804 [139]SC%[179]7[167]807 805 [153]" (null)OT TOO SHABBY! (null)OU MIGHT WANT TO 806 PRINT"RE-TAKE THIS LESSON, SO THAT YOU'LL BE":GOTO810 807 PRINT" [195]OULD BE BETTER. [201] SUGGEST YOU":GOTO806 810 PRINT"READY FOR THE NEXT LESSON!":PRINT"[208]RESS SPACE BAR TO RETURN TO [204]OADSTAR!":GOSUB1300:POKE198,.:WAIT198,1:POKE198,.:GOSUB1400:POKEV+33,.:PRINT"[147][144]LOAD"Q$"HELLO"Q$",8":PRINT"RUN":PRINT"[210]ETURNING TO MAIN MENU . . .[144]";:POKE927,0:POKE631,13:POKE632,13:POKE198,2:END:END 1000 POKEV+33,1:PRINT"[147] [195][207][205][193][204][160]0.14 [212]UTORIAL ":PRINT"[144][176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]";:FORI=1TO10:PRINT"[221] [221]";:NEXT:PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189] 1020 X%[178].:Y%[178]13:[141]1100:[129]I[178]1[164]11:[153]" ";:[130]:[141]1050:[129]I[178]217[164]242:[151]I,[194](I)[176]128:[130] 1035 [151]1020,2:[151]1021,11:[151]1022,1:[151]1023,38:[142] 1050 X%[178].:Y%[178]24:[141]1110:[153]" WAIT";:[151]2023,160:[151]56295,6:[142] 1100 [141]1160 1110 [151]212,.:[153][200]("",Y%[170]1)[163]X%);:[142] 1150 X%[178]SX%:Y%[178]SY%:[137]1110 1160 SX%[178][194](211):SY%[178][194](214):[142] 1200 [141]1300 1205 X%[178]3:Y%[178]13:[141]1110:[153]"FOR (null)RESS SPACE BAR FOR NEXT PAGE. ":[151]198,.:[146]198,1:[151]198,.:X%[178]3:Y%[178]13:[141]1110:[153]" ":[137]1400 1300 [151]646,15:[146]R,C:[146]R,C:[158]CL:[151]646,12:[146]R,C:[146]R,C:[158]CL:[151]646,11:[146]R,C:[146]R,C:[158]CL:[151]646,.:[146]R,C:[146]R,C:[158]CL:[142] 1400 [151]646,11:[146]R,C:[146]R,C:[158]CL:[151]646,12:[146]R,C:[146]R,C:[158]CL:[151]646,15:[146]R,C:[146]R,C:[158]CL:[146]R,C:[146]R,C:[158]WI:[142] 1500 [141]1110:F%[178][171]1:L%[178][194](209)[170]256[172][194](210)[170][194](211):C%[178][194](L%) 1505 [151]L%,[171]F%[172]([194](L%)[175]127)[171]([168]F%)[172]([194](L%)[176]128):F%[178][168]F%:[129]F[178]1[164]48:[161]K$:[139]K$[178]""[167][130]:[137]1505 1512 [139]K$[178]"CLOSE"[176]K$[178][199](148)[167]K$[178]" 1515 F=256:NEXT:POKEL%,C%:IFK$>"@"ANDK$<"["THENK$=CHR$(ASC(K$)+128) 1520 RETURN 1600 AX%=X%:AY%=Y% 1605 FORA=1TOLEN(A$) 1606 GOSUB1500:IFK$=MID$(A$,A,1)THENPRINT""K$;:X%=X%+1:NEXT:RETURN 1607 IFK$=CHR$(13)THEN1606 1610 E=A:E$=MID$(A$,E,1):A=256:NEXT:PRINT"";:POKE216,1:PRINTK$;:POKE212,.:GOSUB1150:POKEV+32,8:PRINT"[129] [207][207][208][211]! [217]OU DIDN'T PRESS THE [146] "E$;:POKE212,0:POKEV+32,8:PRINT"  KEY! ":GOSUB1900:GOSUB1150:POKEV+32,5:PRINT" [206]OW PRESS THE [[201][206][211][212]-[196][197][204]] KEY ONCE: [146] ":X%=AX%+E:Y%=AY% 1630 GOSUB1500:IFK$<>""THEN1630 1632 PRINT"[157] [157]";:GOSUB1150:PRINT" [206]OW FINISH TYPING! [146] ":POKEV+32,14:AX%=AX%+E-1:X%=AX%:Y%=AY%:RETURN 1700 POKE1020,14:POKE1021,24:POKE1022,.:POKE1023,39:SYSSU:GOSUB1050:X%=.:Y%=24:GOTO1110 1800 GOSUB1160:GOSUB1300 1805 X%=.:Y%=24:GOSUB1500:IFK$<>A$ANDK$<>W1$ANDK$<>W2$ANDK$<>W3$THEN1805 1810 GOSUB1035:GOSUB1150:PRINT"[145]":IFK$=A$THENPRINT" [195][207][210][210][197][195][212]! [146][144] ";:SC%=SC%+1:RETURN 1820 PRINT" [211]ORRY. [146][144] ";:RETURN 1900 FORP=1TO2000:NEXT:RETURN 2000 OPEN15,8,15:OPEN8,8,8,"#":PRINT#15,"U1:8 0 18 0":FORI=.TO100:NEXT:FORJ=1TOS:T=INT(RND(1)*6)+18:FORK=1TOINT(RND(1)*5)+3:PRINT#15,"U1:8".T.:FORI=.TO100:NEXT:NEXT:NEXT:CLOSE8:CLOSE15:RETURN